package org.oa.ai;

//import dev.langchain4j.community.model.dashscope.QwenEmbeddingModel;
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import dev.langchain4j.data.document.parser.TextDocumentParser;
import dev.langchain4j.data.document.splitter.DocumentByLineSplitter;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.store.embedding.EmbeddingStore;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;

import java.net.URISyntaxException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

@EnableFeignClients
@SpringBootApplication
public class AspApplication {

    public static void main(String[] args) {
        SpringApplication.run(AspApplication.class, args);
        System.out.println("=====================Ai启动成功========================\n");
    }

    // 配置了向量检索器，但是内存向量检索器没有数据。需要在项目启动的时候给他添加一些数据
//    @Bean
//    CommandLineRunner ingestTermOfServiceToVectorStore(QwenEmbeddingModel qwenEmbeddingModel, EmbeddingStore embeddingStore) throws URISyntaxException {
//        Path path = Paths.get(AspApplication.class.getClassLoader().getResource("rag/service.txt").toURI());
//        return args -> {
//            // 创建文本切解析器
//            TextDocumentParser textDocumentParser = new TextDocumentParser();
//            // 将文件通过文本解析器将文件进行解析
//            Document document = FileSystemDocumentLoader.loadDocument(path, textDocumentParser);
//
//            // 创建切块器，第一个参数是500个字符切一次，第二个参数是如果有断句则自然补充200字符
//            DocumentByLineSplitter documentByLineSplitter = new DocumentByLineSplitter(150, 30);
//            // 调用split将文档进行切块
//            List<TextSegment> split = documentByLineSplitter.split(document);
//
//            // 使用千问的向量化模型，将切块的数据进行向量化
//            List<Embedding> content = qwenEmbeddingModel.embedAll(split).content();
//
//            // 将向量化的数据以及向量前的数据存入内存向量模型中。
//            embeddingStore.addAll(content, split);
//        };
//    }


}
